package com.atguigu.java;

import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author : leimingchao
 * @Description:
 *
 *     jdk8之前的日期时间的API测试
 *           1.System类中currentTimeMillis()
 *           2.java.util.Date和子类java.sql.Date
 *           3.SimpleDateFormat
 *           4.Calendar
 *
 *
 * @date Date : 2021年06月20日 10:16
 */
public class DateTimeTest {

    /**
     * SimpleDateFormat的使用：SimpleDateFormat对日期Date类的格式化好解析
     *
     *      1.两个操作：
     *            1.1 格式化：日期------->字符串
     *            1.2 解析：格式化的逆过程 字符串-------> 日期
     *
     *      2.SimpleDateFormat的实例化
     *
     */
    @Test
    public void test() throws ParseException {
        //实例化:使用默认的构造器
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();

        //格式化日期：日期------->字符串
        Date date = new Date();
        System.out.println(date);
        String format = simpleDateFormat.format(date);
        System.out.println(format);

        //解析：格式化的逆过程 字符串-------> 日期
        String str = "21-6-20 上午10:27";
        Date date1 = simpleDateFormat.parse(str);
        System.out.println(date1);

        //*************************按照指定的方式格式化和解析：调用带参的构造器*****************************
        // SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
        SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        //格式化
        String format1 = simpleDateFormat2.format(date);
        //2021-06-20 10:33:44
        System.out.println(format1);
        //解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现)，否则抛异常
        Date date2 = simpleDateFormat2.parse("2021-06-20 10:33:44");
        System.out.println(date2);
    }

    /**
     * 练习一：字符串 "2020-09-08"转换为java.sql.Date
     * 练习二:三天打鱼两天晒网  1990-01-01   xxxx-xx-xx 打鱼？晒网？
     *        举例：2020-09-08 ？计算总天数
     *        总天数 % 5 == 1,2,3 ：打鱼
     *        总天数 % 5 == 4,0 ：晒网
     *
     *        总天数的计算？
     *            方式一：(date1.getTime() - date2.getTime()) / (1000*60*60*24) + 1
     *            方式二：1990-01-01 --> 2019-12-31 + 2020-01-01 --> 2020-09-08
     */
    @Test
    public void test2() throws ParseException {
        String birth = "2020-09-08";
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = simpleDateFormat.parse(birth);
        System.out.println(date);
        java.sql.Date birthDate = new java.sql.Date(date.getTime());
        System.out.println(birthDate);

    }

    /**
     * Calendar日历类(抽象类)的使用
     */
    @Test
    public void testCalendar() {
        //1.实例化
        //方式一：创建其子类(GregorianCalendar)对象
        //方式二：调用其静态方法getInstance()
        Calendar calendar = Calendar.getInstance();
        // System.out.println(calendar.getClass());
        //2.常用方法
        //get()
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
        //set():Calendar是可变的
        calendar.set(Calendar.DAY_OF_MONTH,22);
        int newDay = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(newDay);

        //add()
        calendar.add(Calendar.DAY_OF_MONTH,-3);
        int plusDay = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(plusDay);

        //getTime():日历类---->Date
        Date date = calendar.getTime();
        System.out.println(date);

        //setTime():Date ----> 日历类
        Date date1 = new Date();
        calendar.setTime(date1);
        int i = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(i);

    }


}
